home *** CD-ROM | disk | FTP | other *** search
- /*
- * OIC structure definitions
- *
- * John Wainwright 1987
- */
-
- #define myIVs(class,structure) ((structure *)(&((char *)(self))[class->c_ivoffset]))
- #define localIVs(obj,structure) ((structure *)(&((char *)(obj))[currentClass->c_ivoffset]))
- #define myCVs(class,structure) ((structure *)(&((char *)((*self)->c_classvars))[class->c_cvoffset]))
- #define localCVs(obj,structure) ((structure *)(&((char *)(*obj)->c_classvars)[currentClass->c_cvoffset]))
-
- #define talloc(t) (t *)scalloc(sizeof(t))
- #define abs(x) (((x) < 0) ? (-(x)) : (x))
- #ifndef NULL
- #define NULL 0L
- #endif
-
- typedef struct class *class;
- typedef struct class **object;
- typedef struct classlist classlist; /* super class list */
- typedef struct MethodTable MethodTable; /* generic function method table */
- typedef struct MethodFunc MethodFunc; /* method table function entry */
- typedef char * keyword_args; /* for the keyword argument system */
-
- struct classlist
- {
- classlist *cl_next;
- class cl_class;
- };
-
- struct MethodFunc /* method function table entry */
- {
- object (*mf_func)(); /* method function */
- class mf_from; /* class from which inherited */
- };
-
- struct class
- {
- class c_classtag; /* class class */
- class c_next; /* class list link */
- char *c_name; /* class name for debugging */
- int c_ivsize; /* total IVs size */
- int c_cvsize; /* total CVs size */
- int c_ivoffset; /* offset to local iv struct */
- int c_cvoffset; /* offset to local cv struct */
- int c_allocz; /* total object size */
- int c_index; /* class index into mthd-tables */
- char *c_classvars; /* class vars block (if any) */
- classlist *c_superclasses; /* superclass list */
- };
-
- extern char *salloc();
- extern char *scalloc();
-
- extern class NewClass();
- extern class currentClass;
- extern class classes;
- extern object New();
- extern object Method();
- extern object ClassMethod();
- extern object Super();
- extern object SuperPassArgs();
- extern int SizeOf();
- extern char *ClassNameOf();
- extern char *MethodName();
- extern int IsAKindOf();
- extern int IsA();
- extern int IsObj();
- extern object key_arg();
-
- #define ClassOf(x) ((class)*(x))
-
- #define CLASS 1 /* index of class method table */
- #define END 0L
-
- struct MethodTable
- {
- int mth_minClass; /* lowest class index */
- int mth_maxClass; /* highest class index */
- char *mth_name; /* generic function name */
- MethodFunc *mth_funcs; /* table of method functions */
- };
-
- #define defGeneric(mth, methTable, name) \
- MethodTable methTable[2] = \
- { \
- { 0, 0, name, 0 }, { 0, 0, name, 0 } \
- }; \
- object \
- mth(obj, args) \
- object obj; \
- char *args; \
- { \
- return \
- (ClassOf(obj) == Class) ? \
- ClassMethod(&methTable[CLASS], obj, &args) \
- : \
- Method(&methTable, obj, &args); \
- }
-
- #define externGeneric(mth, mthTable) \
- extern MethodTable mthTable[2]; \
- extern object mth();